package com.py.framework.filter;

import com.py.framework.common.Constants;
import com.py.framework.core.log.ExceptionLogger;
import com.py.framework.core.redis.bis.JedisBisManage;
import com.py.framework.core.utils.SerializingUtil;
import redis.clients.jedis.Jedis;

/**
 * 用户信息缓存辅助类
 *
 * @author Leegern
 * @date 2018年4月16日
 */
public class IntegrationMenuCacheHelper {

    public static final String INTEGRATION_MENU_KEY = "integrationMenu";

    public static final String INTEGRATION_RESOURCE_KEY = "integrationResource";

    /**
     * 保存用户菜单资源信息
     *
     * @param jdToken 用户令牌
     * @param menus   菜单资源
     */
    public static void putUserMenuCache(byte[] jdToken, byte[] menus) {
        putUserFieldCache(jdToken, SerializingUtil.serialize(INTEGRATION_MENU_KEY), menus);
    }

    /**
     * 获取用户菜单资源
     *
     * @param jdToken 用户令牌
     */
    public static byte[] getUserMenuFromCache(byte[] jdToken) {
        return getUserFieldFromCache(jdToken, SerializingUtil.serialize(INTEGRATION_MENU_KEY));
    }

    /**
     * 保存用户资源数据
     *
     * @param jdToken   用户令牌
     * @param resources 用户资源
     */
    public static void putUserResourcesCache(byte[] jdToken, byte[] resources) {
        putUserFieldCache(jdToken, SerializingUtil.serialize(INTEGRATION_RESOURCE_KEY), resources);
    }

    /**
     * 保存用户属性信息
     *
     * @param jdToken 用户令牌
     * @param field   属性名
     * @param value   属性值
     */
    public static void putUserFieldCache(byte[] jdToken, byte[] field, byte[] value) {
        Jedis jedis = null;
        try {
            jedis = JedisBisManage.getJedis();
            jedis.hset(jdToken, field, value);
            jedis.expire(jdToken, Constants.SESSION_EXPIRE);
        } catch (Exception e) {
            ExceptionLogger.error(e);
        } finally {
            if (null != jedis) {
                JedisBisManage.returnResource(jedis);
            }
        }
    }

    /**
     * 获取用户属性信息
     *
     * @param jdToken 用户令牌
     * @param field   属性名
     */
    public static byte[] getUserFieldFromCache(byte[] jdToken, byte[] field) {
        Jedis jedis = null;
        byte[] result = null;
        try {
            jedis = JedisBisManage.getJedis();
            result = jedis.hget(jdToken, field);
            jedis.expire(jdToken, Constants.SESSION_EXPIRE);
        } catch (Exception e) {
            ExceptionLogger.error(e);
        } finally {
            if (null != jedis) {
                JedisBisManage.returnResource(jedis);
            }
        }
        return result;
    }
}